package com.cn.why.film.filmindex.face;

/**
 * 简单测试
 */
public class ShowMost {
    public static void main(String[] args) {
//        getMuchWord();

        //初始数组
        int[] list = {32,31,12,311,66,15,17,13,10,33,44,34,222};
        System.out.println("****快速排序****");
        System.out.println("排序前:");
        disPlay(list);
        System.out.println("排序后:");
        quickSort(list,0,list.length-1);
        disPlay(list);
    }

    /**
     * java找出一个字符串中重复最多字母的次数
     * 临时数组cnt的长度只要大于等于“z”的ASCII码就行了。如果还要输出这个重复最多的字母，可以遍历cnt，找到最大值对应的index，它就是要找字母的ASCII码。
     */
    public static void getMuchWord() {
        String s = "dkshkdhkdftfdlkbgtfdkjihknfyf"; // 待统计字符串
        int max = 0; // 记录最大出现次数
        int[] cnt = new int[127]; // 临时计数用的数组,Ascall码的范围在0~127，所以定义int数组的长度为127。
        for (int i = 0; i < s.length(); i++) { // 循环字符以做统计
            char c = s.charAt(i); // 取出单个字母
//            max = (++cnt[c] > max) ? cnt[c] : max; // 计数并检测最大出现次数
            if (++cnt[c] > max) {
                max = cnt[c];
            }
        }
        System.out.println(max);
    }


    /**
     * 递归排序
     * @param list
     * @param left 数组开始位置
     * @param right 数组结束位置
     */
    private static void quickSort(int[] list, int left, int right) {
        //左边必须小于右边
        if(left<right){
            //分割数组，找到分割点
            int splitPoint = splitPoint(list,left,right);
            //给左边的数组排序
            quickSort(list,left,splitPoint-1);
            //给右边的数组排序
            quickSort(list,splitPoint+1,right);
        }
    }

    /**
     *
     * @param list
     * @param left
     * @param right
     */
    private static int splitPoint(int[] list, int left, int right) {
        //用数组的第一个数作为基准
        int first = list[left];
        while (left<right){
            while (left<right && list[right]>=first){
                right--;
            }
            //交换位置
            swap(list,left,right);
            while (left<right && list[left]<=first){
                left++;
            }
            swap(list,left,right);
            //交换位置
        }
        return left;
    }

    /**
     * 交换数组两个数的位置
     * @param list
     * @param left
     * @param right
     */
    private static void swap(int[] list, int left, int right) {
        if(list != null && list.length>0){
            int temp = list[left];
            list[left] = list[right];
            list[right] = temp;
        }
    }


    /**
     * 打印
     * @param list
     */
    private static void disPlay(int[] list) {
        if (list!=null && list.length>0){
            for(int num : list){
                System.out.print(num+" ");
            }
            System.out.println("");
        }
    }
}
